<template>
  <div class="my-input">
    <input
      :type="type"
      @input="inpChange"
      :value="modelValue"
      :placeholder="placeholder"
      @blur="inpBlur"
    />
    <slot name="text"></slot>
    <slot name="icon"></slot>
    <!-- 用slot标签使用传来的插槽 name代表了插槽的名字 -->
    <slot name="img"></slot>
    <slot name="button"></slot>
  </div>
</template>
<script>
export default {
  props: {
    modelValue: String,
    //v-model的变量
    placeholder: String,
    //占位符
    type: String,
    //类型
  },
  setup(props, ctx) {
    const inpChange = (e) => {
      ctx.emit("update:modelValue", e.target.value);
    };
    // 跟vue2相比 v-model变成了modelValue和update:modelValue的合写

    const inpBlur = () => {
      ctx.emit("blur");
    };
    //失去焦点的时候在这里调用父组件的blur事件
    return { inpChange, inpBlur };
  },
};
</script>
<style lang="scss" scoped>
.my-input {
  width: 270px;
  height: 50px;
  background: #f5f5f5;
  border-radius: 5px;
  display: flex;
  align-items: center;
  padding-left: 14px;
  box-sizing: border-box;
  margin-bottom: 20px;
  font-size: 13px;
  justify-content: space-between;
  input {
    // width: 187px;
    flex: 1;
    height: 28px;
    border: none;
    background: rgba(0, 0, 0, 0);
    min-width: 50px;
    //设置最小宽度
  }

  ::v-deep i {
    margin-right: 14px;
  }

  ::v-deep span {
    font-size: 13px;
    color: #e12c1e;
    margin-right: 5px;
  }
  //   ::v-deep 这是一个样式穿透 加了scoped就只能控制这个组件内的 标签的样式 我们这里的span标签是写在父组件的插槽里得到 所以说 要想控制 不在这个组件的标签 加上样式穿透就能控制了

  ::v-deep img {
    width: 50%;
    height: 100%;
  }

  ::v-deep div{
    width:50%;
    height:100%;
    border-left:1px solid #E1E1E1;
    display:flex;
    justify-content:center;
    align-items:center;
  }
}

.error {
  border: 1px solid rgb(225, 44, 30);
  background: rgb(255, 233, 228);
}
.success {
  border: 1px solid rgb(56, 219, 36);
  background: rgb(225, 255, 223);
}
</style>
